perm filename ARMUS[SYS,HE] blob sn#064722 filedate 1973-10-01 generic text, type T, neo UTF8
COMMENT ⊗   VALID 00011 PAGES 
RECORD PAGE   DESCRIPTION
 00001 00001
 00002 00002	IFN SIMU,<			THIS IS SIMULATION ONLY
 00006 00003		SKIPE BAND
 00007 00004		MOVE 1,FILE
 00008 00005	ZDTH:
 00011 00006	BACK:	
 00013 00007	IFN REPORT+TRACK,<
 00014 00008	READ:	SETZM STWT
 00015 00009	SPACE:	MOVEI 1,=180
 00017 00010	FINISH:	SPCWAR 636367
 00018 00011	SETFLT:	SKIPN NERVES
 00019 ENDMK
⊗;
IFN SIMU,<			;THIS IS SIMULATION ONLY
ARM.IN:	SETZM INRUN		;TO CALL GAIN AND CHANGE JOBNAM TO [ARM]
	SETOM ARMINI		;INDICATES ARM.IN HAS BEEN CALLED
	PUSHJ P,GAIN
ARM.ST:	SETO 1,			;INDICATES END OF RUN
	SKIPN ARMINI
	POPJ P,
	MOVEM 16,SSAVE+16	;SAVE SAIL AC'S EXCEPT FOR STACK
	MOVEI 16,SSAVE
	BLT 16,SSAVE+15
	SKIPE  INRUN
	JRST[	HRLZI 16,MSAVE	;PUT BACK IN RUN AC'S
		BLT 16,15
		MOVE 16,MSAVE+16
		JRST SSW]	;AND RETURN TO SPACE WAR
	JRST GETMES
INRUN:	0			;IN THE MIDDLE OF A RUN DO NEXT TICK
ARMINI:	0			;ARM.IN HAS BEEN CALLED
SSAVE:	BLOCK 17		;SAIL AC'S
MSAVE:	BLOCK 17		;USER AC'S
WAIT:	HRLZI 16,SSAVE		;PUT BACK AC'S
	BLT 16,15
	MOVE 16,SSAVE+16
	SETZM INRUN
	POPJ P,
GETMES:	SETOM INRUN
>
IFE SIMU,<
START:	MOVE P,[XWD -PDLL,UPDL]
	PUSHJ P,GAIN
	OUTSTR[ASCIZ/!
/]
WAIT:
>
	WRCV EXE
	HLRZ 5,EXE
	CAIE 5,MASTER
	JRST[	MOVEI 3,VERSN
		JRST FINISH]
WAITED:	MOVE 1,SEGJOB
	HRRZM 1,JOB
	HLRZM 1,SEG
IFN REPORT+TRACK,<
	MOVE 1,[IOWD  DBL+100,DATO]
	MOVEM 1,DATPT			;DATA POINTER
	MOVEM 1,DATIWD			;OUTPUT POINTER
>
	SETZB 3,TRAJER
	MOVEI 0,0
	LDB 1,[POINT 3,EXE,35]
	CAIG 1,1
	JRST READ
IFE ARMWORK,<
	MOVEI 3,NOTHER
	JRST FINISH
>
IFN REPORT+TRACK,<		;WRITE OUT DATA
	INIT 15,17
	SIXBIT /DSK/
	0
	JRST NDM
	MOVE 2,FILE
	MOVEM 2,DFILE
	MOVE 2,PPPN
	MOVEM 2,DPPPN
IFN TRACK,<
	SKIPE WALK
	JRST[	LOOKUP 15,DFILE
		JRST NDMS
		MOVE 2,[IOWD DBL,DATO]
		MOVEM 2,DATPT
		INPUT 15,1
		JRST EXFN]
>
	ENTER 15,DFILE
	JRST[NDMS:MOVEI 3,NODATA
		SUB 17,[XWD 1,1]
		JRST FINISH]
>
EXFN:	CAIN 1,3
	JRST[	MOVE 4,EXE
		TRNN 4,HOLDF
		JRST [	SKIPE ARGS
			SOS JUMPBK
			JRST MOVON]
		SOS 1,STKPTR
		MOVEI 2,(1)
		LDB 3,[POINT 9,EXE,26]
		SUBI 1,(3)
		HRLI 1,ARGS
		BLT 1,(2)
		TRNE 4,RELOCF
		JRST[	MOVE 1,STKPTR
			SUBI 1,(3)
			SUB 1,CBUFS
			HRRM 1,@STKPTR
			JRST BPTR]
	BPTR:	SOS STKPTR
	MOVON:	SETOM FUNCT
		JRST SSW]
	CAIE 1,2
	JRST[	MOVEI 3,INVMES
		JRST FINISH]
	SETZM FUNCT
	HRREI 2,BUF-1001
	MOVEM 2,CBUFS
	SETOM BUF
	SETZM DOING	;TRAJECTORY SET UP FOR
	SKIPE BAND
	JRST[	MOVEI 1,BUF
		MOVEM 1,GOODIE
		MOVEI 1,1001
		MOVEM 1,GOODIE+1
		SETZM GOODIE+2
		MOVE 14,BAND
		UFBRD 14,GOODIE
		JRST RE
		SKIPN BUF+1000
		JRST[	SETZM BLOCKS
			MOVEI 1,BUF2
			MOVEM 1,NXTBUF
			SETZM @NXTBUF
			JRST ZDTH]
		MOVEI 1,BUF2
		MOVEM 1,GOODIE
		MOVEI 1,20
		MOVEM 1,GOODIE+2
		UFBRD 14,GOODIE
		JRST RE
		MOVEI 1,=74
		SKIPN BUF2+1000
		MOVEI 1,0
		MOVEM 1,BLOCKS
		MOVEI 1,40
		MOVEM 1,GOODIE+2
		MOVEI 1,BUF
		MOVEM 1,NXTBUF
		MOVNS BUF2
		JRST ZDTH]
	MOVE 1,FILE
	MOVEM 1,LFILE
	MOVE 1,PPPN
	MOVEM 1,LPPPN
	INIT 16,17
	SIXBIT/DSK/
	XWD 0,0
	JRST[NDM:	MOVEI 3,NODEV
			JRST FINISH]
	LOOKUP 16,LFILE
	JRST[		MOVEI 3,NOFILE
			JRST FINISH]
	MOVS 1,LPPPN		;FILE LENGTH
	MOVN 1,1
	ASH 1,-11
	MOVEM 1,BLOCKS
	SOSGE BLOCKS
	JRST FINISH
	MOVE 10,[IOWD 1000,BUF]
	SETZ 11,
	IN 16,10
	JRST[	SOSGE BLOCKS
		JRST[	MOVEI 1,BUF2
			MOVEM 1,NXTBUF
			SETZM @NXTBUF
			JRST ZDTH]
		ADDI 10,1001
		IN 16,10
		JRST[	MOVEI 1,BUF
			MOVEM 1,NXTBUF
			MOVNS BUF2
			JRST ZDTH]
		JRST RE]
	JRST RE
ZDTH:
	MOVE 1,[XWD DELTH,DELTH+1]
	SETZM DELTH
	BLT 1,DELTH+5
	MOVEI 1,=60
	MOVEM 1,STWT
	MOVNS BUF
SSW:	
IFE USER+TRACK,<LOCK 1,>
	PUSHJ P,SPACE
WWS:
IFE REPORT+TRACK<
IFE USER<
	MOVEI 1,1
	CALLI 1,31
>
>
	MOVE BITSAV
	TRNE DTST
	JRST BACK
	MOVE 1,@NXTBUF
	JUMPGE 1,.+2			;MORE TRAJECTORY TO COME
	JRST[	SOSGE BLOCKS
		JRST[	SETZM @NXTBUF	;ALL DONE MAKK THIS AS LAST
			RELEASE 16,
			JRST WDO]
		SKIPE BAND
		JRST[	MOVE 1,NXTBUF
			MOVEM 1,GOODIE
			UFBRD 14,GOODIE
			JRST RBD
			MOVE 1,NXTBUF
			SKIPN 1000(1)
			SETZM BLOCKS
			MOVEI 1,20
			ADDM 1,GOODIE+2
			JRST ROK]
		MOVE 10,NXTBUF
		SOJ 10,
		HRLI 10,-1000
		IN 16,10
		JRST[ROK:MOVE 1,NXTBUF
			MOVNS (1)
			ADDI 1,1001
			CAILE 1,BUF2
			MOVEI 1,BUF
			MOVEM 1,NXTBUF
			JRST WDO]
	RBD:	MOVE 1,NXTBUF		;READ ERROR
		SETZM @NXTBUF		;MARK AS LAST
	WFF:	MOVE BITSAV		;AND WAIT FOR IT TO END
		TRNN DTST
		JRST WFF
	RE:	MOVEI 3,REAERR
		JRST BACK]
WDO:
IFN SIMU,<
	MOVEM 16,MSAVE+16
	MOVEI 16,MSAVE
	BLT 16,MSAVE+15
	HRLZI 16,SSAVE
	BLT 16,15
	MOVE 16,SSAVE+16
	SETZ 1,
	POPJ P,
>
IFE REPORT+TRACK,<
	IFE USER,<JRST WWS>
	IFN USER,<JRST SSW>
>
IFN TRACK,<
	SKIPE WALK
	JRST SSW
>
IFN REPORT+TRACK,<
	HRRZ 1,DATIWD		;START TO WRITE
	CAIL 1,DATO+DBL-1
	JRST DOD
	HRRZ 2,DATPT		;LAST LOC FILLED
WA:	SUBI 2,(1)
	JUMPL 2,[MOVEI 2,DATO+DBL-1
	JRST WA]
	TRZ 2,177
	JUMPN 2,[	MOVN 1,2	;MORE THAN 200 WORDS SO WRITE IT OUT
			HRLM 1,DATIWD	;NEG WORD COUNT
			OUT 15,DATIWD
			HRRZ 1,DATIWD
			ADDI 1,(2)
			HRRM 1,DATIWD
			JRST DOD]
DOD:
	IFE USER,<JRST WWS>
	IFN USER,<JRST SSW>
>
BACK:	
IFE USER+TRACK,<UNLOCK 1,>
	SPCWAR 636367
	MOVEI 0,0
	SKIPE 3,TRAJER
	JRST[	IFE DEB+SIMU,<
		IFN TRACK,<SKIPN WALK>
			TRO RONLY
			MOVEM BITSAV
			MOVEI 1,1
			CALLI 1,31
		DRSW:	PUSHJ P,SPACE
		DRR:	MOVE BITSAV
			TRNN DTST
		IFE USER,<JRST DRR>
		IFN USER,<JRST DRSW>
			SPCWAR 636367
			MOVEI 0,0
			PUSHJ P,SETSET
>
			JRST NOERR]
IFN SIMU,<PUSHJ P,SETSET>
NOERR:	IFE USER,<RELEASE 17,
	RELEASE 14,
>
	IFN REPORT+TRACK,<
	PUSHJ P,CLODAT
	CLOSE 15,
	>
	SKIPN SEG
	JRST[	MOVEM 3,STATUS
		MOVE 2,[XWD TH,THETA]
		BLT 2,THETA+6
		MOVE 2,[XWD TORE,ARGS+10]
		BLT 2,ARGS+15
		MOVE 1,JOB
		MOVEM 1,REPLY
		SEND REPLY
		JRST WAIT
		JRST WAIT]
	MOVE 2,SEG
	CALLI 2,400016
	JRST WAIT
	HRRZ 4,NAME
	MOVE 2,(4)
	HLRZ 4,NAME
	MOVEM 2,(4)
	PUSHJ P,[SETNAM:MOVE 2,THETA
	MOVEI 4,6(2)
	HRLI 2,TH
	IFN TRACK,<SKIPN WALK>
	BLT 2,(4)
	MOVE 2,ETOR
	MOVEI 4,6(2)
	HRLI 2,TORE
	BLT 2,(4)
	PUSHJ P,SETFLT
	MOVEM 3,@STATUS
	MOVE 4,DOING
	MOVEM 4,@SEGMENT
	HRRZ 2,NAME
	SETZM (2)
	HRLZI 2,40
	MOVEM 2,IBIT
	INTUUO 4,JOB
	JUMP
	MOVEI 2,0
	CORE2 2,
	JFCL
	POPJ P,]
	JRST WAIT
IFN REPORT+TRACK,<
CLODAT:IFN TRACK,<
	SKIPE WALK
	POPJ P,
>
NWI:	HRRZ 1,DATIWD
	HRRZ 2,DATPT
	SUBI 2,(1)
	JUMPL 2,[	HRRZI 2,DATO+DBL-1
			SUBI 2,(1)
			MOVN 2,2
			HRLM 2,DATIWD
			SKIPE 2
			OUT 15,DATIWD
			MOVEI 2,DATO-1
			HRRM 2,DATIWD
			JRST NWI]
	ADDI 2,200
	TRZ 2,177
	MOVN 1,2
	HRLM 1,DATIWD
	OUT 15,DATIWD
	POPJ P,
>

READ:	SETZM STWT
	SKIPG 1
	TRO  POTREAD
	TRO RONLY
RSW:	PUSHJ P,SPACE
RSWW:	MOVE BITSAV
	TRNN  DTST
IFE USER,<JRST RSWW>
IFN USER,<JRST RSW>
	MOVE 3,TRAJER
	PUSHJ P,SETSET
	JRST FINISH

SPACE:	MOVEI 1,=180
	MOVEM 1,COUNT
	TRO TRIP
	LDB 1,[POINT 1,EXE,32]
	MOVEM 1,SOTCHS
	JUMPE 1,.+2
	TRO STCH
IFN DEB,<SETZM ETIM>
	MOVEM BITSAV
IFN TRACK,<SKIPE WALK>
IFN TRACK+USER,<
	JRST[	MOVEM 17,USAVE+17
		MOVEI 17,USAVE
		BLT 17,USAVE+16
		JSR STRADR-1
		HRLZI 17,USAVE
		BLT 17,16
		MOVE 17,USAVE+17
		POPJ P,]
>
IFE USER,<
GETAD:	INIT 17,417
	SIXBIT /AD/
	XWD 0,0
	JRST[	POP P,3
		MOVEI 3,ADBUS
		JRST FINISH]
	SPCWAR 1,STRADR
>
	POPJ P,

UPDL:	FINISH
	BLOCK PDLL

IFN USER+TRACK,<
USAVE:	BLOCK 20
>
IFN TRACK,<WALK:0>

IFN REPORT+TRACK,<
DFILE:	0
	SIXBIT/TMP/
	0
DPPPN:	0
>
LFILE:	0
	SIXBIT/TRJ/
	0
LPPPN:	0

GOODIE:	BLOCK 3
FINISH:	SPCWAR 636367
IFE USER,<RELEASE 17,
	RELEASE 14,
>
	SKIPE SEG
	JRST [ATSEG:	MOVE 1,SEG
			CALLI 1,400016
			JRST WAIT
			PUSHJ P,SETNAM
			JRST WAIT]
	MOVEM 3,STATUS
	MOVE 1,[XWD TH,THETA]
	BLT 1,THETA+6
	MOVE 1,JOB
	MOVEM 1,REPLY
	SKIPN 1
	JRST WAITED
	SEND REPLY
	JRST WAIT
	JRST WAIT

REPLY:	0
	EXE
SEG:	0
SOTCH:	0
JOB:	0
IBIT:	000040000000
TICKS:	0
SETFLT:	SKIPN NERVES
	POPJ P,
	MOVEI 6,1
	MOVE 4,NERVES
STL:	MOVE 5,OBS(6)
	MOVEM 5,(4)
	ADDI 4,=16
	SOJGE 6,STL
	POPJ P,

	XLIST
	SUBTTL	SPACEWAR CODE	CONTROL			LOU PAUL
	LIST